/**
 * @author Gustavo Velazquez
 */

function clear_form_elements(ele) {

	$(ele).find(':input').each(function() {
		switch(this.type) {
			case 'password':
			case 'select-multiple':
			case 'select-one':
			case 'text':
			case 'textarea':
				$(this).val('');
				break;
			case 'checkbox':
			case 'radio':
				this.checked = false;
		}
	});
	$('.alert').hide(300);

}

// COMPRUEBA LA EXTENSION DEL ARCHIVO
function comprobar_extension() {
	var ext = $('#id_archivo').val().split('.').pop().toLowerCase();
	var pk_informe_anterior = $('#id_formulario').val();
	var nombre_archivo = $('#id_archivo').val().split('\\').pop();
	var mensaje_archivo = '';

	// VERIFICAR SI EL CAMPO ESTA VACIO, EN TAL CASO MENSAJE DE CAMPO REQUERIDO
	if (ext == '') {
		// EN CASO DE EDICION DEL CAMPO, NO ES NECESARIO QUE SE CARGUE UN NUEVO DOCUMENTO
		if (pk_informe_anterior == 0) {
			$("#archivo_okay").hide(500);
			$("#error_archivo").hide(500);
			$("#error_archivo").show(500);
			mensaje_archivo = mensaje_archivo.concat('Se requiere que suba el documento del informe en los formatos habilitados.');
			$("#error_archivo").html(mensaje_archivo);
			$("#id_archivo").val('');
			return {
				bandera : 0,
				mensaje : mensaje_archivo
			};
		} else {
			$("#archivo_okay").hide(500);
			$("#error_archivo").hide(500);
			return {
				bandera : 1,
				mensaje : ''
			};
		}

	} else {

		$("#archivo_okay").hide(500);
		$("#error_archivo").hide(500);

		if ($.inArray(ext, ['pdf', 'doc', 'docx']) == -1) {
			$("#error_archivo").show(500);
			mensaje_archivo = mensaje_archivo.concat('La extensi��n/formato .'.concat(ext, ' del archivo ', nombre_archivo, ' no esta permitida'));
			$("#error_archivo").html(mensaje_archivo);
			$("#id_archivo").val('');
			return {
				bandera : 0,
				mensaje : mensaje_archivo
			};
		} else {
			$("#archivo_okay").html('Archivo: '.concat(nombre_archivo, ' cargado exitosamente!'));
			$("#archivo_okay").show(500);
			return {
				bandera : 1,
				mensaje : ''
			};
		}
	}
}

// VERIFICA QUE NO HAYA UN SOLAPAMIENTO DE PERIODOS
function comprobar_periodo(fecha_inicio, fecha_fin, id_formulario) {
	return $.ajax({
		type : "POST",
		url : '/plataforma/indicadores/ajax_control_periodo_indicadores/',
		data : {
			'fecha_inicio' : fecha_inicio,
			'fecha_fin' : fecha_fin,
			'id_formulario' : id_formulario,
		},
		async: false,
	});
}


// VERIFICA QUE NO HAYA UN SOLAPAMIENTO DE PERIODOS
function comprobar_valor(valor, min, max) {
	return $.ajax({
		type : "POST",
		url : '/plataforma/indicadores/ajax_control_valor/',
		data : {
			'valor' : valor,
			'min' : min,
			'max' : max,
		},
		async: false,
	});
}

// CUANDO CAMBIA EL ARCHIVO SE VERIFICA
$('#id_archivo').change(comprobar_extension);

$('#id_resumen').blur(function() {
	// Resumen
	var resumen = document.getElementById('id_resumen').value;
	if (resumen.length < 30 || resumen == '') {
		//alert (resumen.length);
		alertar_error = true;
		$('#error_resumen').html('Campo resumen requerido. Minimo 30 caracteres.').show(500);
	} else {
		$('#error_resumen').hide(500);
	}
});

$('#id_resumen').keypress(function() {
	// Resumen
	var i = 0;
	var resumen = document.getElementById('id_resumen').value;
	if (resumen.length < 30 || resumen == '') {
		i++;
	} else {
		$('#error_resumen').hide(500);
	}
});

$('#id_fecha_inicio , #id_fecha_fin ').datepicker().on('changeDate', function() {
	//$(".alert").hide();
	var fecha_inicio = document.getElementById('id_fecha_inicio').value;
	var fecha_fin = document.getElementById('id_fecha_fin').value;
	var id_formulario = document.getElementById("id_formulario").value;

	$(this).datepicker('hide');
	if (fecha_inicio != '' && fecha_fin != '') {
		respuesta = comprobar_periodo(fecha_inicio, fecha_fin, id_formulario);
		respuesta.success(function(data) {
			if (data.bandera == true) {
				// Periodo correcto
				$('#error_periodo').hide();
				$('#periodo_okay').html(data.mensaje).show(500);
				$('#id_fecha_inicio , #id_fecha_fin ').datepicker('hide');
			} else {
				// Periodo incorrecto
				$('#periodo_okay').hide();
				$('#error_periodo').html(data.mensaje).show(500);
				$('#id_fecha_inicio , #id_fecha_fin ').datepicker('hide');
			}
		});
	}
});

// Mostrar el calendario en los campos de fecha de inicio y fin
$('#id_fecha_inicio').click(function() {
	$("#id_fecha_inicio.datePicker").datepicker();
});
$('#id_fecha_fin').click(function() {
	$("#id_fecha_fin.datePicker").datepicker();
});

$(document).ready(function() {
	$('.indicador > .alert').each(function() {
		if ($(this).val() == '') {
			$(this).hide(500);
		} else {
			$(this).show(500);
		}
	});
	$('#periodo_okay').hide();
	$('#error_periodo').hide();
	$('#error_resumen').hide();
	$('#archivo_okay').hide();
	$('#error_archivo').hide();
});

$('input:text').focus(function() {
	$(this).prev('input:radio').prop('checked', true);
});

$('input:text').blur(function() {
	if ($(this).val() == '') {
		$(this).prev('input:radio').prop('checked', false);
	}
});

$('input:radio').change(function() {
	if ($(this).siblings().size() > 0) {
		$(this).next('input:text').focus();
	} else {
		var clase = $(this).parent().prev().children('input:text').attr("class");
		var id_elemento = '#'.concat(clase);
		$(this).parent().prev().children('input:text').val('');
		$(this).parent().prev().children('input:radio').val('');
		$(id_elemento).hide(500);
	}
});

$('.indicador > p > input:text').blur(function() {
	// Verificar si el valor es v��lido.
	var clase = $(this).attr("class");
	var id_elemento = '#'.concat(clase);
	$(id_elemento).hide();
	var input_texto = $(this);
	var input_radio = $(this).prev();
	if ($(this).val() != '') {
		var max = -1;
		if (clase.match(/porcentaje/g)) {
			max = 100;
		}
		respuesta = comprobar_valor($(this).val(), 0, max);
		respuesta.success(function(data) {
			if (data.bandera == false) {
				$(id_elemento).html(data.mensaje).show(500);
			} else {
				$(id_elemento).hide(500);
			}
			input_radio.val(input_texto.val());
		});
	}

});

$('#id_guardar_formulario').click(function() {
	var error = false;
	var warning = false;
	var mensaje = '';
	var campos_vacios = '<p>Los siguientes campos se encuentran vac��os:</p>';

	// Verificar el periodo
	var fecha_inicio = document.getElementById('id_fecha_inicio').value;
	var fecha_fin = document.getElementById('id_fecha_fin').value;
	var id_formulario = document.getElementById("id_formulario").value;

	if (fecha_inicio != '' && fecha_fin != '') {
		respuesta = comprobar_periodo(fecha_inicio, fecha_fin, id_formulario);
		resultado_comprobacion = respuesta.responseJSON;
		if (resultado_comprobacion.bandera == false){
			error = false;
			mensaje = mensaje.concat("<p>- ", resultado_comprobacion.mensaje ," </p>");
			$('#periodo_okay').hide();
			$('#error_periodo').html(resultado_comprobacion.mensaje).show(500);
			$('#id_fecha_inicio , #id_fecha_fin ').datepicker('hide');
		}
		
	} else {
		if (fecha_inicio == '') {
			error = true;
			mensaje = mensaje.concat("<p>- Campo fecha de inicio vac��o</p>");
			$('#periodo_okay').hide();
			$('#error_periodo').html("Ninguno de los campos fecha debe estar vacio").show(500);
			$('#id_fecha_inicio , #id_fecha_fin ').datepicker('hide');
		}
		if (fecha_fin == '') {
			error = true;
			mensaje = mensaje.concat("<p>- Campo fecha de fin vac��o</p>");
			$('#periodo_okay').hide();
			$('#error_periodo').html("Ninguno de los campos fecha debe estar vacio").show(500);
			$('#id_fecha_inicio , #id_fecha_fin ').datepicker('hide');
		}
	}

	// Verificar el resumen
	// Resumen
	var resumen = document.getElementById('id_resumen').value;
	if (resumen.length < 30 || resumen == '') {
		//alert (resumen.length);
		error = true;
		$('#error_resumen').html('Campo resumen requerido. Minimo 30 caracteres.').show(500);
		if (resumen == '') {
			mensaje = mensaje.concat("<p>- Campo resumen vac��o</p>");
		} else {
			mensaje = mensaje.concat("<p>- El resumen es muy corto, requiere a lo m��nimo 30 caracteres.</p>");
		}
	} else {
		$('#error_resumen').hide(500);
	}

	// Verificar el archivo
	var auxiliar = comprobar_extension();

	if (auxiliar.bandera == 0) {
		error = true;
		mensaje = mensaje.concat('<p>- ', auxiliar.mensaje, '</p>');
	}

	retorno = verificar_valores();

	if (retorno.error) {
		error = true;
		mensaje = mensaje.concat(retorno.mensaje);
	} else {
		if (retorno.warning) {
			warning = true;
			campos_vacios = campos_vacios.concat(retorno.campos_vacios);
		}
	}

	if (error == true) {
		$('#myModalLabel').html("<font color='red'>Error! - Verifique formulario</font>");
		$('#mensaje-modal').html(mensaje);
		$('#myModal').modal('show');
		$('#id_confirmar').hide();
	} else {
		if (warning == true) {
			$('#myModalLabel').html("<font color='yellow'>Advertencia! - Campos vac��os</font>");
			campos_vacios = campos_vacios.concat("<p>��Desea confirmar la operaci��n?</p>");
			$('#mensaje-modal').html(campos_vacios);
			$('#myModal').modal('show');
			$('#id_confirmar').show();
		} else {
			$('#form-indicadores').submit();
		}
	}
});

$('#id_confirmar').click(function() {
	$('#form-indicadores').submit();
});

function verificar_valores() {
	objeto = {
		error : false,
		warning : false,
		mensaje : '',
		campos_vacios : ''
	};

	$('.indicador').each(function() {

		var datos_post = $('#form-indicadores').serialize();
		var id_auxiliar = $(this).children().next().children('input:radio').attr('id');
		var regex = new RegExp(id_auxiliar);
		var indicador = $(this).children(':first-child');
		var campo = objeto.campos_vacios;
		var mensaje_error = objeto.mensaje;

		if (datos_post.match(regex) == null) {
			objeto.warning = true;
			objeto.campos_vacios = objeto.campos_vacios + '<p>- ' + $(this).children(':first-child').text() + '</p>';
		} else {
			if (id_auxiliar.match(/entero_/g)) {
				var id_elemento = '#'.concat(id_auxiliar);
				console.log(id_elemento);
				console.log($(id_elemento).val());
				var valor_elemento = $(id_elemento).val();
				if (valor_elemento == '') {
					if ($(id_elemento).parent().next().children(':first-child').is(':checked') == false) {
						objeto.warning = true;
						objeto.campos_vacios = objeto.campos_vacios + '<p>- ' + $(this).children(':first-child').text() + '</p>';
					}
				} else {
					respuesta = verificar_valor(valor_elemento, 0, -1);
					if (respuesta.bandera == false) {
						objeto.error = true;
						objeto.mensaje = objeto.mensaje + '<p>- ' + indicador.text() + ': ' + respuesta.mensaje + '</p>';
					}
				}

			}

			if (id_auxiliar.match(/porcentaje_/g)) {
				var id_elemento = '#'.concat(id_auxiliar);
				console.log(id_elemento);
				console.log($(id_elemento).val());
				var valor_elemento = $(id_elemento).val();
				if (valor_elemento == '') {
					if ($(id_elemento).parent().next().children(':first-child').is(':checked') == false) {
						objeto.warning = true;
						objeto.campos_vacios = objeto.campos_vacios + '<p>- ' + $(this).children(':first-child').text() + '</p>';
					}
				} else {
					respuesta = verificar_valor(valor_elemento, 0, 100);
					if (respuesta.bandera == false) {
						objeto.error = true;
						objeto.mensaje = objeto.mensaje + '<p>- ' + indicador.text() + ': ' + respuesta.mensaje + '</p>';
					}
				}
			}
		}
	});
	return objeto;
}

function verificar_valor(valor, min, max) {
	console.log(valor);
	if (isNumber(valor)) {
		if (max == -1) {
			if (valor >= min) {
				return {
					bandera : true,
					mensaje : ''
				};
			} else {
				return {
					bandera : false,
					mensaje : '<b><i>No se aceptan n��meros negativos</i></b>'
				};
			}
		} else {
			if (valor >= min && valor <= max) {
				return {
					bandera : true,
					mensaje : ''
				};
			} else {
				return {
					bandera : false,
					mensaje : '<b><i>La respuesta debe ser entre 0 y 100</i></b>'
				};
			}
		}

	} else {
		return {
			bandera : false,
			mensaje : '<b><i>La respuesta debe ser num��rica</i></b>'
		};
	}

}

function isNumber(n) {
	return !isNaN(parseFloat(n)) && isFinite(n);
}
